package br.edu.ufcg.msnlab2.grupo07.monteCarlo;

import java.util.Map;

import br.edu.ufcg.msnlab2.MSNLabException;
import br.edu.ufcg.msnlab2.misc.Function;

/**
 * This class represents an interface for solving an integration numerically
 * according to Monte Carlo's method.
 * @author David Candeia
 * @author Felipe Leal
 */

public interface PlainMonteCarloSolver {
	
	/**
	 * This method will find the integration value of a certain function, with one or more variables,
	 * according to the integral limits defined by the user and a certain number of points to be used.
	 * @param function The expression of the function being evaluated
	 * @param limits The limits of the integral for each variable
	 * @param numberOfPoints The number of points to be used in the integration estimation
	 * @return The integration result and its variance
	 * @throws MSNLabException 
	 */
	public MonteCarloResult solve(Function function,
			Map<String, Tuple<Double, Double>> limits, long numberOfPoints) throws MSNLabException;
}
